using Godot;

// 定义按钮的行为模式
public enum TriggerMode
{
    SetSpecificColor, // 强制变成指定颜色
    CycleNextColor    // 变成下一个颜色
}

[Tool] // 让脚本在编辑器内运行，实现所见即所得
public partial class ColorTrigger : Area2D
{
    // --- 配置项 ---
    [Export]
    public TriggerMode Mode
    {
        get => _mode;
        set { _mode = value; UpdateVisuals(); }
    }
    private TriggerMode _mode = TriggerMode.SetSpecificColor;

    [Export]
    public PlayerColor TargetColor
    {
        get => _targetColor;
        set { _targetColor = value; UpdateVisuals(); }
    }
    private PlayerColor _targetColor = PlayerColor.Red;

    // --- 内部引用 ---
    [Export] public Sprite2D VisualSprite; // 记得拖拽赋值
    [Export] public PointLight2D Light;    // 可选：拖拽赋值

    public override void _Ready()
    {
        if (!Engine.IsEditorHint()) // 只在游戏运行时连接信号
        {
            BodyEntered += OnBodyEntered;
        }

        UpdateVisuals();
    }

    private void OnBodyEntered(Node2D body)
    {
        if (body is PlayerController player)
        {
            if (Mode == TriggerMode.SetSpecificColor)
            {
                // 模式1：强制变色
                player.SwitchColor(TargetColor);
            }
            else
            {
                // 模式2：切换到下一色
                player.SwitchColor();
            }

            // 这里可以加一个按钮被按下的动画 (Tween) 或音效
            PlayPressEffect();
        }
    }

    // 更新按钮的视觉颜色
    private void UpdateVisuals()
    {
        if (VisualSprite == null) return;

        Color displayColor = Colors.White;

        if (Mode == TriggerMode.SetSpecificColor)
        {
            // 如果是指定红色，按钮就显示红色
            displayColor = Cfg.GetColorValue(TargetColor);
        }
        else
        {
            // 如果是循环模式，显示紫色或白色，表示它是“变换”的
            displayColor = Colors.Magenta;
        }

        VisualSprite.Modulate = displayColor;
        if (Light != null) Light.Color = displayColor;
    }

    private void PlayPressEffect()
    {
        // 简单的弹力动画：踩下去扁一点然后复原
        var tween = CreateTween();
        tween.TweenProperty(VisualSprite, "scale", new Vector2(1.2f, 0.5f), 0.1f);
        tween.TweenProperty(VisualSprite, "scale", new Vector2(1.0f, 1.0f), 0.1f).SetDelay(0.1f);





    }
}